﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Arthus.IzlazniRacun
{
    public partial class stavkaIzlaznogRacuna : Form
    {
        public static int IDstavke;
        public static string IDartikla;
        public stavkaIzlaznogRacuna(int StavkaID, string ArtikalID)
        {
            InitializeComponent();
            IDstavke = StavkaID;
            IDartikla = ArtikalID;

            posjedObjekat = new Posjed();
            posjedObjekat.PopuniComboBoxVeleprodaja(comboBoxProdajnaJedinica);

            textBoxKataloskiBroj.ReadOnly = true;
            textBoxPDVstopa.ReadOnly = true;
            textBoxVPCenaArtikla.ReadOnly = true;
            textBoxKolicinaArtikla.ReadOnly = true;
            textBoxArtikalNaziv.ReadOnly = true;
            textBoxIspodArtiklaNaziv.ReadOnly = true;
            textBoxMPCenaArtikla.ReadOnly = true;
            textBoxIspodMPCenaArtikla.ReadOnly = true;
        }

        STV stvObjekat = null;
        STV stvObjekat2 = null;
        STV stvObjekat3 = null;
        Posjed posjedObjekat = null;
        Artikal artikalObjekat = null;
        ZAG zagObjekat = null;

        private void stavkaIzlaznogRacuna_Load(object sender, EventArgs e)
        {
            PodesiKontrolePremaProknjizenosti();
        }

        private void PodesavanjeTextBoxovaIzracunavanja()
        {
            if (textBoxIznosRabata.Text.Trim().Length > 0 && textBoxCena.Text.Trim().Length > 0 && textBoxRabatProcenat.Text.Trim().Length > 0 &&
                 textBoxKolicina.Text.Trim().Length > 0 && textBoxVrednost.Text.Trim().Length > 0 && textBoxVrednostBezRabata.Text.Trim().Length > 0 &&
                textBoxIznosPDV.Text.Trim().Length > 0 && textBoxVrednostSaPDV.Text.Trim().Length > 0 && textBoxVrednostNivelacije.Text.Trim().Length > 0 && 
                textBoxVPCenaArtikla.Text.Trim().Length > 0 && textBoxKolicinaZaNivelaciju.Text.Trim().Length > 0)
            {
                try
                {
                    labelPoruka.Text = "";
                    buttonDodaj.Enabled = true;
                    buttonIzmeni.Enabled = true;

                    decimal iznosRabata = Convert.ToDecimal(textBoxIznosRabata.Text);
                    decimal cena = Convert.ToDecimal(textBoxCena.Text);
                    decimal rabatProcenat = Convert.ToDecimal(textBoxRabatProcenat.Text);
                    decimal kolicina = Convert.ToDecimal(textBoxKolicina.Text);
                    decimal vrednost = Convert.ToDecimal(textBoxVrednost.Text);
                    decimal vrednostBezRabata = Convert.ToDecimal(textBoxVrednostBezRabata.Text);
                    decimal iznosPDV = Convert.ToDecimal(textBoxIznosPDV.Text);
                    decimal vrednostSaPDV = Convert.ToDecimal(textBoxVrednostSaPDV.Text);
                    decimal vrednostNivelacije = Convert.ToDecimal(textBoxVrednostNivelacije.Text);
                    decimal vpCenaArtikla = Convert.ToDecimal(textBoxVPCenaArtikla.Text);
                    decimal kolicinaZaNivelaciju = Convert.ToDecimal(textBoxKolicinaZaNivelaciju.Text);

                    if (kolicina != 0) {
                        vrednost = cena * kolicina;
                        kolicinaZaNivelaciju = kolicina;
                    }
                    try
                    {
                        if (rabatProcenat != 0 && vrednost != 0)
                        {
                            iznosRabata = vrednost * rabatProcenat / 100;
                        }
                    }
                    catch (DivideByZeroException dbze) { }
                    catch (FormatException fe) { }

                    vrednostBezRabata = vrednost - iznosRabata;
                    try
                    {
                        iznosPDV = vrednostBezRabata * Convert.ToDecimal(Razno.IzbrisiPojedineKaraktereIzStringa3(textBoxPDVstopa.Text)) / 100;
                    }
                    catch (DivideByZeroException dbze) { }
                    catch (FormatException fe) { }

                    vrednostSaPDV = vrednostBezRabata + iznosPDV;

                    if (kolicinaZaNivelaciju != 0)
                    {
                        vrednostNivelacije = (cena - vpCenaArtikla) * kolicinaZaNivelaciju;
                    }
                    else
                    {
                        vrednostNivelacije = 0.00m;
                    }

                    textBoxVrednost.Text = string.Format("{0:0.00}", vrednost);
                    textBoxIznosRabata.Text = string.Format("{0:0.00}", iznosRabata);
                    textBoxVrednostBezRabata.Text = string.Format("{0:0.00}", vrednostBezRabata);
                    textBoxIznosPDV.Text = string.Format("{0:0.00}", iznosPDV);
                    textBoxVrednostSaPDV.Text = string.Format("{0:0.00}", vrednostSaPDV);
                    textBoxVrednostNivelacije.Text = string.Format("{0:0.00}", vrednostNivelacije);
                    textBoxKolicinaZaNivelaciju.Text = string.Format("{0:0.000}", kolicinaZaNivelaciju);
                }
                catch (FormatException fe)
                {
                    labelPoruka.Text = "Minus mora biti na početku!";
                    buttonDodaj.Enabled = false;
                    buttonIzmeni.Enabled = false;
                }
            }
        }

        private void PodesiKontrolePremaProknjizenosti()
        {
            zagObjekat = new ZAG();
            stvObjekat = new STV();
            if (izlazniRacunForma.IDzaglavlja == 0)
            {
                buttonDodaj.Enabled = false;
                buttonIzmeni.Enabled = false;
            }
            else if (zagObjekat.ProveraProknjizenDokumentIliNe(Convert.ToInt32(izlazniRacunForma.IDzaglavlja)))
            {
                buttonDodaj.Enabled = false;
                buttonIzmeni.Enabled = false;
            }
            else if (textBoxArtikalNaziv.Text.Length > 0)
            {
                if (stavkaIzlaznogRacuna.IDstavke != 0 && stvObjekat.PostojiUBaziIliNeNaOsnovuID(Convert.ToInt32(stavkaIzlaznogRacuna.IDstavke)))
                {
                    buttonDodaj.Enabled = true;
                    buttonIzmeni.Enabled = true;
                }
                else
                {
                    buttonDodaj.Enabled = true;
                    buttonIzmeni.Enabled = false;
                }
            }
            else
            {
                buttonDodaj.Enabled = false;
                buttonIzmeni.Enabled = false;
            }

        }

        private void stavkaIzlaznogRacuna_FormClosing(object sender, FormClosingEventArgs e)
        {
            IDartikla = null;
            IDstavke = 0;
        }

        private void stavkaIzlaznogRacuna_Activated(object sender, EventArgs e)
        {
            stvObjekat = new STV();
            stvObjekat.PopuniKontroleUStavkaIzlaznogRacunaForma(textBoxKataloskiBroj, textBoxPDVstopa, textBoxVPCenaArtikla, textBoxKolicinaArtikla, textBoxArtikalNaziv,
                textBoxIspodArtiklaNaziv, textBoxMPCenaArtikla, textBoxIspodMPCenaArtikla, comboBoxProdajnaJedinica, textBoxKolicina, textBoxCena, textBoxVrednost,
                textBoxRabatProcenat, textBoxIznosRabata, textBoxVrednostBezRabata, textBoxIznosPDV, textBoxVrednostSaPDV, textBoxKolicinaZaNivelaciju,
                textBoxVrednostNivelacije);
            PodesavanjeTextBoxovaIzracunavanja();
            PodesiKontrolePremaProknjizenosti();

        }

        private void buttonZatvori_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void VratiSveKontroleNaPocetnuVrednost()
        {
            comboBoxProdajnaJedinica.SelectedIndex = 0;
            textBoxIzborArtiklaPremaKataloskomBroju.Text = "";
            textBoxIzborArtiklaPremaOznaci.Text = "";
            textBoxKolicina.Text = "0.000";
            textBoxCena.Text = "0.00";
            textBoxRabatProcenat.Text = "0.00";
            textBoxIznosRabata.Text = "0.00";
            textBoxVrednost.Text = "0.00";
            textBoxVrednostBezRabata.Text = "0.00";
            textBoxIznosPDV.Text = "0.00";
            textBoxVrednostSaPDV.Text = "0.00";
            textBoxKolicinaZaNivelaciju.Text = "0.000";
            textBoxVrednostNivelacije.Text = "0.00";
            IDartikla = "";
            IDstavke = 0;
        }

        private void TABKaoENTER(KeyEventArgs e)
        {
            if (e.KeyData == Keys.Enter)
            {
                e.SuppressKeyPress = true;
                SelectNextControl(ActiveControl, true, true, true, true);
            }
        }

        private void comboBoxProdajnaJedinica_KeyDown(object sender, KeyEventArgs e)
        {
            TABKaoENTER(e);
        }

        private void textBoxIzborArtiklaPremaKataloskomBroju_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)//ukoliko se unese taster Enter
            {
                this.Cursor = Cursors.WaitCursor;
                artikalObjekat = new Artikal();
                artikalObjekat.PretragaArtikalaStavkaIzlaznogRacuna(textBoxIzborArtiklaPremaKataloskomBroju, textBoxIzborArtiklaPremaOznaci, textBoxKataloskiBroj, textBoxPDVstopa, textBoxVPCenaArtikla,
                    textBoxKolicinaArtikla, textBoxArtikalNaziv, textBoxMPCenaArtikla, textBoxCena, textBoxKolicinaZaNivelaciju);
                stvObjekat = new STV();
                stvObjekat.PopuniKontroleUStavkaIzlaznogRacunaForma(textBoxKataloskiBroj, textBoxPDVstopa, textBoxVPCenaArtikla, textBoxKolicinaArtikla, textBoxArtikalNaziv,
                textBoxIspodArtiklaNaziv, textBoxMPCenaArtikla, textBoxIspodMPCenaArtikla, comboBoxProdajnaJedinica, textBoxKolicina, textBoxCena, textBoxVrednost,
                textBoxRabatProcenat, textBoxIznosRabata, textBoxVrednostBezRabata, textBoxIznosPDV, textBoxVrednostSaPDV, textBoxKolicinaZaNivelaciju,
                textBoxVrednostNivelacije);
                PodesavanjeTextBoxovaIzracunavanja();
                PodesiKontrolePremaProknjizenosti();
                this.Cursor = Cursors.Default;
            }
            if (textBoxIzborArtiklaPremaKataloskomBroju.Text.Length > 0)
            {
                TABKaoENTER(e);
            }
        }

        private void textBoxIzborArtiklaPremaOznaci_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)//ukoliko se unese taster Enter
            {
                this.Cursor = Cursors.WaitCursor;
                artikalObjekat = new Artikal();
                artikalObjekat.PretragaArtikalaStavkaIzlaznogRacuna(textBoxIzborArtiklaPremaKataloskomBroju, textBoxIzborArtiklaPremaOznaci, textBoxKataloskiBroj, textBoxPDVstopa, textBoxVPCenaArtikla,
                    textBoxKolicinaArtikla, textBoxArtikalNaziv, textBoxMPCenaArtikla, textBoxCena, textBoxKolicinaZaNivelaciju);
                stvObjekat = new STV();
                stvObjekat.PopuniKontroleUStavkaIzlaznogRacunaForma(textBoxKataloskiBroj, textBoxPDVstopa, textBoxVPCenaArtikla, textBoxKolicinaArtikla, textBoxArtikalNaziv,
                textBoxIspodArtiklaNaziv, textBoxMPCenaArtikla, textBoxIspodMPCenaArtikla, comboBoxProdajnaJedinica, textBoxKolicina, textBoxCena, textBoxVrednost,
                textBoxRabatProcenat, textBoxIznosRabata, textBoxVrednostBezRabata, textBoxIznosPDV, textBoxVrednostSaPDV, textBoxKolicinaZaNivelaciju,
                textBoxVrednostNivelacije);
                PodesavanjeTextBoxovaIzracunavanja();
                PodesiKontrolePremaProknjizenosti();
                this.Cursor = Cursors.Default;
            }
            if (textBoxIzborArtiklaPremaKataloskomBroju.Text.Length > 0)
            {
                TABKaoENTER(e);
            }
        }

        private void textBoxKolicina_KeyDown(object sender, KeyEventArgs e)
        {
            TABKaoENTER(e);
        }
        private void textBoxCena_KeyDown(object sender, KeyEventArgs e)
        {
            TABKaoENTER(e);
        }
        private void textBoxVrednost_KeyDown(object sender, KeyEventArgs e)
        {
            TABKaoENTER(e);
        }
        private void textBoxRabatProcenat_KeyDown(object sender, KeyEventArgs e)
        {
            TABKaoENTER(e);
        }
        private void textBoxIznosRabata_KeyDown(object sender, KeyEventArgs e)
        {
            TABKaoENTER(e);
        }
        private void textBoxVrednostBezRabata_KeyDown(object sender, KeyEventArgs e)
        {
            TABKaoENTER(e);
        }
        private void textBoxIznosPDV_KeyDown(object sender, KeyEventArgs e)
        {
            TABKaoENTER(e);
        }
        private void textBoxVrednostSaPDV_KeyDown(object sender, KeyEventArgs e)
        {
            TABKaoENTER(e);
        }
        private void textBoxKolicinaZaNivelaciju_KeyDown(object sender, KeyEventArgs e)
        {
            TABKaoENTER(e);
        }
        private void textBoxVrednostNivelacije_KeyDown(object sender, KeyEventArgs e)
        {
            TABKaoENTER(e);
        }

        private void buttonDodaj_Click(object sender, EventArgs e)
        {
            zagObjekat = new ZAG();
            zagObjekat.PromenaUZAGPrilikomUnosaNoveStavkeKalkulacija(Convert.ToDecimal(textBoxVrednostNivelacije.Text), Convert.ToInt32(izlazniRacunForma.IDzaglavlja));
            stvObjekat = new STV();
            stvObjekat.UnosNoveStavkeKrozIzlazniRacun(comboBoxProdajnaJedinica, textBoxKolicina, textBoxCena, textBoxVrednost, textBoxRabatProcenat, textBoxIznosRabata,
                textBoxVrednostBezRabata, textBoxIznosPDV, textBoxVrednostSaPDV, textBoxKolicinaZaNivelaciju, textBoxVrednostNivelacije, textBoxPDVstopa);
            VratiSveKontroleNaPocetnuVrednost();
            comboBoxProdajnaJedinica.Focus();
        }

        private void textBoxKolicina_KeyPress(object sender, KeyPressEventArgs e)
        {
            Razno.DozvoliUnosSamoBrojevaIJedneTackeIMinusa(sender, e);
        }
        private void textBoxCena_KeyPress(object sender, KeyPressEventArgs e)
        {
            Razno.DozvoliUnosSamoBrojevaIJedneTacke(sender, e);
        }
        private void textBoxVrednost_KeyPress(object sender, KeyPressEventArgs e)
        {
            Razno.DozvoliUnosSamoBrojevaIJedneTacke(sender, e);
        }
        private void textBoxRabatProcenat_KeyPress(object sender, KeyPressEventArgs e)
        {
            Razno.DozvoliUnosSamoBrojevaIJedneTacke(sender, e);
        }
        private void textBoxIznosRabata_KeyPress(object sender, KeyPressEventArgs e)
        {
            Razno.DozvoliUnosSamoBrojevaIJedneTacke(sender, e);
        }
        private void textBoxVrednostBezRabata_KeyPress(object sender, KeyPressEventArgs e)
        {
            Razno.DozvoliUnosSamoBrojevaIJedneTacke(sender, e);
        }
        private void textBoxIznosPDV_KeyPress(object sender, KeyPressEventArgs e)
        {
            Razno.DozvoliUnosSamoBrojevaIJedneTacke(sender, e);
        }
        private void textBoxVrednostSaPDV_KeyPress(object sender, KeyPressEventArgs e)
        {
            Razno.DozvoliUnosSamoBrojevaIJedneTacke(sender, e);
        }
        private void textBoxKolicinaZaNivelaciju_KeyPress(object sender, KeyPressEventArgs e)
        {
            Razno.DozvoliUnosSamoBrojevaIJedneTackeIMinusa(sender, e);
        }
        private void textBoxVrednostNivelacije_KeyPress(object sender, KeyPressEventArgs e)
        {
            Razno.DozvoliUnosSamoBrojevaIJedneTacke(sender, e);
        }

        private void buttonIzmeni_Click(object sender, EventArgs e)
        {
            zagObjekat = new ZAG();
            zagObjekat.PromenaUZAGPrilikomUnosaNoveStavkeKalkulacija(Convert.ToDecimal(textBoxVrednostNivelacije.Text), Convert.ToInt32(izlazniRacunForma.IDzaglavlja));
            stvObjekat = new STV();
            stvObjekat.IzmenaStavkeKrozIzlazniRacun(comboBoxProdajnaJedinica, textBoxKolicina, textBoxCena, textBoxVrednost, textBoxRabatProcenat, textBoxIznosRabata,
                textBoxVrednostBezRabata, textBoxIznosPDV, textBoxVrednostSaPDV, textBoxKolicinaZaNivelaciju, textBoxVrednostNivelacije, textBoxPDVstopa);
            if (Convert.ToDecimal(textBoxKolicina.Text) > 0)
            {
                this.Close();
            }
        }

        private void textBoxKolicina_KeyUp(object sender, KeyEventArgs e)
        {
            PodesavanjeTextBoxovaIzracunavanja();
        }
        private void textBoxCena_KeyUp(object sender, KeyEventArgs e)
        {
            PodesavanjeTextBoxovaIzracunavanja();
        }
        private void textBoxRabatProcenat_KeyUp(object sender, KeyEventArgs e)
        {
            PodesavanjeTextBoxovaIzracunavanja();
        }
        private void textBoxKolicinaZaNivelaciju_KeyUp(object sender, KeyEventArgs e)
        {
            PodesavanjeTextBoxovaIzracunavanja();
        }


    }
}
